package bbs.controller;

import bbs.exception.ControllerException;
import bbs.model.User;
import bbs.service.UserService;
import bbs.utils.Constant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpSession;
import java.util.Map;
import java.util.Objects;

/**
 * @author ljg;
 * @create 2022-06-08 10:18
 */
@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    UserService userService;


    /**
     *  用户注册 ：
     *  验证码是否正确
     *  用户名是否存在
     *  两次密码是否正确
     *  满足条件可以注册
     * @param username 用户名
     * @param password 密码
     * @param code 验证码
     * @param rePassword 确认密码
     * @param infos 发送到注册页面的对象
     * @param session 当前会话
     * @return 成功则返回到success.jsp ，失败则返回到注册页面
     */
    @RequestMapping("/register")
    public String register(@RequestParam("userName") String username,
                           @RequestParam("password") String password,
                           @RequestParam("code") String code,
                           @RequestParam("repassword") String rePassword,
                           Map<String,Object> infos,
                           HttpSession session){

        String sessionCode = (String)session.getAttribute("code" ) ;
        if( sessionCode.equalsIgnoreCase( code )){
            if( password.equals( rePassword )){
                // 密码是相同的
                User user = userService.getUserByUserName( username ) ;
                if(Objects.nonNull( user )){
                    // 此时 User 不为空 ， 表示 有对象了
                    infos.put(Constant.REGISTER_MASSAGE , "用户名已经存在") ;
                    return "register" ;
                }else{
                    // 此时 表示 user == null ，那么就意味着 用户名是可以使用的
                    User user1 =  userService.register( username , password ) ;
                    if( Objects.nonNull( user1 ) ){
                        //这里 需要注意session 中 key="user" ,要和拦截器的保持一致
                        session.setAttribute("user" , user1 ) ;
                        return "success" ;
                    }else {
                        throw new ControllerException( "注册失败") ;
                    }
                }
            }else{
                // 密码 不相同
                infos.put( Constant.REGISTER_MASSAGE , "两次密码不一致") ;
                return "register" ;
            }
        }else{
            infos.put(Constant.REGISTER_MASSAGE , "验证码错误") ;
            return "register" ;
        }


    }
}

//        System.out.println("//通过session 获取到 验证码");
//        String sessionCode = (String)session.getAttribute("code");
//        System.out.println(sessionCode);
//        System.out.println("//判断验证码");
//        if (sessionCode.equalsIgnoreCase(code)){
//            System.out.println("//此时验证码是正确的");
//            User user = userService.getUserByUserName(username);
//            //接着判断 用户是否存在
//            if(Objects.nonNull(user)){
//                //表示 用户已存在
//                info.put(Constant.REGISTER_MASSAGE,"用户名已存在");
//                return "register" ;
//            }else {
//                //此时表示 用户 为 null ,可以 注册成新用户
//                User user1 = userService.register(username, password);
//                System.out.println("//判断 密码是否一致");
//                if (password.equals(repassword)){
//                    // 此时 密码一致 可以进行注册
//                    System.out.println("//判断是否注册成功");
//                    if (Objects.nonNull(user1)){
//                        System.out.println(" //注册成功");
//                        session.setAttribute("user",user1);
//                        System.out.println(session.getAttribute("user1"));
//                        return "success" ;
//                    }else {
//                        //注册失败
//                        throw new ControllerException("注册失败") ;
//                        //return "register" ;
//                    }
//                }else {
//                    System.out.println("// 两次密码不一致");
//                    info.put(Constant.REGISTER_MASSAGE,"两次密码不一致!!") ;
//                    return "register" ;
//                }
//            }
//        }else {
//            //此时说明验证码错误，
//            info.put(Constant.REGISTER_MASSAGE,"验证码错误！！");
//            return "register" ;
//        }
//    }
//}
